mjlocalfandomcom_ja-20200214-history
モジュール:Kana
Module: Kana -- Written by MihailJP local kana = {} -- replace_table -- Internal table for to_sortkey() kana.replace_table = { -- Hiragana: one character, but three bytes long "あ" = "あ", "い" = "い", "う" = "う", "え" = "え", "お" = "お", "か" = "か", "き" = "き", "く" = "く", "け" = "け", "こ" = "こ", "さ" = "さ", "し" = "し", "す" = "す", "せ" = "せ", "そ" = "そ", "た" = "た", "ち" = "ち", "つ" = "つ", "て" = "て", "と" = "と", "な" = "な", "に" = "に", "ぬ" = "ぬ", "ね" = "ね", "の" = "の", "は" = "は", "ひ" = "ひ", "ふ" = "ふ", "へ" = "へ", "ほ" = "ほ", "ま" = "ま", "み" = "み", "む" = "む", "め" = "め", "も" = "も", "や" = "や", "ゆ" = "ゆ", "よ" = "よ", "ら" = "ら", "り" = "り", "る" = "る", "れ" = "れ", "ろ" = "ろ", "わ" = "わ", "ゐ" = "ゐ", "ゑ" = "ゑ", "を" = "を", "ん" = "ん", "ゔ" = "う", "が" = "か", "ぎ" = "き", "ぐ" = "く", "げ" = "け", "ご" = "こ", "ざ" = "さ", "じ" = "し", "ず" = "す", "ぜ" = "せ", "ぞ" = "そ", "だ" = "た", "ぢ" = "ち", "づ" = "つ", "で" = "て", "ど" = "と", "ば" = "は", "び" = "ひ", "ぶ" = "ふ", "べ" = "へ", "ぼ" = "ほ", "ぱ" = "は", "ぴ" = "ひ", "ぷ" = "ふ", "ぺ" = "へ", "ぽ" = "ほ", "ぁ" = "あ", "ぃ" = "い", "ぅ" = "う", "ぇ" = "え", "ぉ" = "お", "っ" = "つ", "ゃ" = "や", "ゅ" = "ゆ", "ょ" = "よ", "ゎ" = "わ", -- Katakana: one character, but three bytes long "ア" = "あ", "イ" = "い", "ウ" = "う", "エ" = "え", "オ" = "お", "カ" = "か", "キ" = "き", "ク" = "く", "ケ" = "け", "コ" = "こ", "サ" = "さ", "シ" = "し", "ス" = "す", "セ" = "せ", "ソ" = "そ", "タ" = "た", "チ" = "ち", "ツ" = "つ", "テ" = "て", "ト" = "と", "ナ" = "な", "ニ" = "に", "ヌ" = "ぬ", "ネ" = "ね", "ノ" = "の", "ハ" = "は", "ヒ" = "ひ", "フ" = "ふ", "ヘ" = "へ", "ホ" = "ほ", "マ" = "ま", "ミ" = "み", "ム" = "む", "メ" = "め", "モ" = "も", "ヤ" = "や", "ユ" = "ゆ", "ヨ" = "よ", "ラ" = "ら", "リ" = "り", "ル" = "る", "レ" = "れ", "ロ" = "ろ", "ワ" = "わ", "ヰ" = "ゐ", "ヱ" = "ゑ", "ヲ" = "を", "ン" = "ん", "ヴ" = "う", "ガ" = "か", "ギ" = "き", "グ" = "く", "ゲ" = "け", "ゴ" = "こ", "ザ" = "さ", "ジ" = "し", "ズ" = "す", "ゼ" = "せ", "ゾ" = "そ", "ダ" = "た", "ヂ" = "ち", "ヅ" = "つ", "デ" = "て", "ド" = "と", "バ" = "は", "ビ" = "ひ", "ブ" = "ふ", "ベ" = "へ", "ボ" = "ほ", "ヷ" = "わ", "ヸ" = "ゐ", "ヹ" = "ゑ", "ヺ" = "を", "パ" = "は", "ピ" = "ひ", "プ" = "ふ", "ペ" = "へ", "ポ" = "ほ", "ァ" = "あ", "ィ" = "い", "ゥ" = "う", "ェ" = "え", "ォ" = "お", "ッ" = "つ", "ャ" = "や", "ュ" = "ゆ", "ョ" = "よ", "ヮ" = "わ", -- Voiced sound marks: just drop them "゙" = "", "゚" = "", "゛" = "", "゜" = "", -- Kana ligatures "ゟ" = "より", "ヿ" = "こと", -- Hyphenation "・" = "", "゠" = "", -- Long Kana: two characters, but six bytes long "あー" = "ああ", "いー" = "いい", "うー" = "うう", "えー" = "ええ", "おー" = "おお", "かー" = "かあ", "きー" = "きい", "くー" = "くう", "けー" = "けえ", "こー" = "こお", "さー" = "さあ", "しー" = "しい", "すー" = "すう", "せー" = "せえ", "そー" = "そお", "たー" = "たあ", "ちー" = "ちい", "つー" = "つう", "てー" = "てえ", "とー" = "とお", "なー" = "なあ", "にー" = "にい", "ぬー" = "ぬう", "ねー" = "ねえ", "のー" = "のお", "はー" = "はあ", "ひー" = "ひい", "ふー" = "ふう", "へー" = "へえ", "ほー" = "ほお", "まー" = "まあ", "みー" = "みい", "むー" = "むう", "めー" = "めえ", "もー" = "もお", "やー" = "やあ", "ゆー" = "ゆう", "よー" = "よお", "らー" = "らあ", "りー" = "りい", "るー" = "るう", "れー" = "れえ", "ろー" = "ろお", "わー" = "わあ", "ゐー" = "ゐい", "ゑー" = "ゑえ", "をー" = "をお", "んー" = "んん", } -- deletion_table -- Internal table for is_kana_only() kana.deletion_table = { "あ" = "", "い" = "", "う" = "", "え" = "", "お" = "", "か" = "", "き" = "", "く" = "", "け" = "", "こ" = "", "さ" = "", "し" = "", "す" = "", "せ" = "", "そ" = "", "た" = "", "ち" = "", "つ" = "", "て" = "", "と" = "", "な" = "", "に" = "", "ぬ" = "", "ね" = "", "の" = "", "は" = "", "ひ" = "", "ふ" = "", "へ" = "", "ほ" = "", "ま" = "", "み" = "", "む" = "", "め" = "", "も" = "", "や" = "", "ゆ" = "", "よ" = "", "ら" = "", "り" = "", "る" = "", "れ" = "", "ろ" = "", "わ" = "", "ゐ" = "", "ゑ" = "", "を" = "", "ん" = "", } -- to_sortkey -- Returns: Japanese normalized Kana for sortkey -- Usage: function kana.to_sortkey(frame) local val = frame.args1 local work = val -- A Kana character is 3 bytes long in UTF-8 text. work = string.gsub(work, ".-", "") -- ignore references work = string.gsub(work, "", "") -- ignore references work = string.gsub(work, "(...)", kana.replace_table) work = string.gsub(work, "(...)ゝ", kana.replace_table) work = string.gsub(work, "(...)ゞ", kana.replace_table) work = string.gsub(work, "(...)ヽ", kana.replace_table) work = string.gsub(work, "(...)ヾ", kana.replace_table) work = string.gsub(work, "(...ー)",kana.replace_table) local normalized = work return normalized end -- is_kana_only -- Returns: Check if given string only consists of Kana -- Usage: function kana.is_kana_only(frame) local val = frame.args1 -- A Kana character is 3 bytes long in UTF-8 text. local garbages = string.gsub(kana.to_sortkey(frame), "(...)", kana.deletion_table) if garbages "" then return frame.args"true" or val else return frame.args"false" or "" end end return kana